import {LineSegments} from '../objects/LineSegments.js'
import {LineBasicMaterial} from '../materials/LineBasicMaterial.js'
import {BufferAttribute} from '../core/BufferAttribute.js'
import {Float32BufferAttribute} from '../core/BufferAttribute.js'
import {BufferGeometry} from '../core/BufferGeometry.js'

class Box3Helper extends LineSegments {
  constructor(box, color = 0xffff00) {
    const indices = new Uint16Array([0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7])

    const positions = [1, 1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1]

    const geometry = new BufferGeometry()

    geometry.setIndex(new BufferAttribute(indices, 1))

    geometry.setAttribute('position', new Float32BufferAttribute(positions, 3))

    super(geometry, new LineBasicMaterial({color: color, toneMapped: false}))

    this.box = box

    this.type = 'Box3Helper'

    this.geometry.computeBoundingSphere()
  }

  updateMatrixWorld(force) {
    const box = this.box

    if (box.isEmpty()) return

    box.getCenter(this.position)

    box.getSize(this.scale)

    this.scale.multiplyScalar(0.5)

    super.updateMatrixWorld(force)
  }
}

export {Box3Helper}
